package com.wenx.v3system.modular.platform.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.wenx.base.rest.BaseRestService;
import com.wenx.v3system.modular.platform.domain.dto.PlatformUserDto;
import com.wenx.v3system.modular.platform.domain.po.PlatformUser;
import com.wenx.v3system.modular.platform.domain.query.PlatformUserQuery;

import java.util.List;

/**
 * 平台用户服务接口
 * 基于简化权限模型的用户管理
 * 
 * @author wenx
 */
public interface PlatformUserService extends IService<PlatformUser>, BaseRestService<PlatformUserDto, PlatformUserQuery> {

    /**
     * 根据用户名查询用户
     */
    PlatformUserDto getUserByUsername(String username);

    /**
     * 用户登录
     */
    PlatformUserDto login(String username, String password);

    /**
     * 获取用户角色列表
     */
    List<String> getUserRoles(Long userId);

    /**
     * 分配用户角色
     */
    void assignUserRoles(Long userId, List<String> roleIds);

    /**
     * 获取用户所有权限
     */
    List<String> getUserPermissions(Long userId);

    /**
     * 检查用户是否有指定权限
     */
    boolean hasPermission(Long userId, String permission);

    /**
     * 获取用户可访问的租户列表
     */
    List<String> getUserAccessibleTenants(Long userId);

    /**
     * 设置用户租户访问权限
     */
    void setUserTenantAccess(Long userId, String accessType, List<String> tenantIds);

    /**
     * 检查用户是否可访问指定租户
     */
    boolean canAccessTenant(Long userId, String tenantId);

    /**
     * 重置用户密码
     */
    String resetUserPassword(Long userId);

    /**
     * 更新用户状态
     */
    void updateUserStatus(Long userId, Integer status);

    /**
     * 更新最后登录信息
     */
    void updateLastLoginInfo(Long userId, String loginIp);

    /**
     * 检查用户名是否存在
     */
    boolean checkUsernameExists(String username, Long excludeId);

    /**
     * 检查邮箱是否存在
     */
    boolean checkEmailExists(String email, Long excludeId);

    /**
     * 获取用户菜单权限
     */
    List<String> getUserMenuCodes(Long userId);

    /**
     * 是否为超级管理员
     */
    boolean isSuperAdmin(Long userId);

    /**
     * 清除用户权限缓存
     *
     * @param userId 用户ID
     */
    void clearUserPermissionCache(Long userId);

    /**
     * 清除所有权限缓存
     */
    void clearAllPermissionCache();
}